/**
 * Created by zy on 2016/7/5.
 * 缺陷维修管理 - 管体缺陷
 */


;(function ($, window, document, undefined) {

    // 管道
    var $pipeline = $('#JQ_pipeline').select3();
    // 管段
    var $segment = $('#JQ_segment').select3({
        title: '管段'
    });
    // 起点位置
    var $begin = $('#JQ_begin').select3({
        title: '起点位置',
        server: true,
        mileType: 'float',
        param: {'pipeLineId': $pipeline, 'pipeSegmentId': $segment}
    });
    // 终点位置
    var $end = $('#JQ_end').select3({
        title: '终点位置',
        server: true,
        mileType: 'float',
        param: {'pipeLineId': $pipeline, 'pipeSegmentId': $segment, 'beginSignId': $begin}
    });
    // 触发管道
    $pipeline.element.on('select', function (e, v) {
        var id = v || $pipeline.val();
        if (id) {
            // 管段
            DyyBase.ajax(DyyBase.url_segment(), {pipeLineId: id}, function (dataset) {
                var json = DyyBase.getSelect(dataset);
                $segment.add(json);
            });
            // 起点 & 终点
            DyyBase.ajax(DyyBase.url_pipe_pos(), {pipeLineId: id}, function (dataset) {
                var begin = DyyBase.getPos(dataset, 'begin', true);
                var end = DyyBase.getPos(dataset, 'end', true);
                $begin.asset(begin);
                $end.asset(end);
            });
        } else {
            $segment.add([]);
            $begin.add([]);
            $end.add([]);
        }
    });
    // 触发管段
    $segment.element.on('select', function (e, v) {
        var id = v || $segment.val();
        if (id) {
            // 起点 & 终点
            DyyBase.ajax(DyyBase.url_segment_pos(), {pipeSegmentId: id}, function (dataset) {
                var begin = DyyBase.getPos(dataset, 'begin', true);
                var end = DyyBase.getPos(dataset, 'end', true);
                $begin.asset(begin);
                $end.asset(end);
            });
        } else {
            $begin.add([]);
            $end.add([]);
        }
    });

    // 任务状态
    var $status = $('#JQ_status').select3({
        search: false,
        data: [
            {id: 'state01', text: '待发布'},
            {id: 'WAIT_FOR_REPAIR', text: '待维修'},
            {id: 'MAINTENANCE', text: '进行中'},
            {id: 'ALREADY_REPAIR', text: '已维修'}
        ]
    });

    // 初始化日期控件
    var $date_01 = $('#JQ_input_date_01');
    var $date_02 = $('#JQ_input_date_02');

    // 显示 地图 - 列表 按钮
    var $btn_map = $('#JQ_show_task_map');
    var $btn_list = $('#JQ_show_task_list');

    // 查询列表 - 查询地图 按钮
    var $search_btn_list = $('#JQ_search_btn_list');
    var $search_btn_map = $('#JQ_search_btn_map');

    // 表格数据
    var $table_01 = $('#JQ_datatable_01').checkbox3();
    // 按钮盒子
    var $btn_box = $('#JQ_btn_span');

    // 列表div
    var $list_div = $('#JQ_task_table');
    // 地图div
    var $map_div = $('#JQ_task_map');

    /**
     * 搜索项对象
     * @type {{getCondition: filter.getCondition, getTaskIdArr: filter.getTaskIdArr}}
     */
    var filter = {
        // 获取搜索表单项,以对象返回
        getCondition: function (param) {

            // 搜索条件对象
            var data = {};

            // 默认为true，意为开启各项验证
            data.mode = true;

            // 分页参数
            if (param) {
                if (param.start == 0) {
                    data['jsonBean.pageNum'] = 1;
                } else {
                    data['jsonBean.pageNum'] = param.start / 10 + 1;
                }
                data['jsonBean.pageCount'] = param.length;
            }

            // 管道
            data.pipeLineId = function () {
                var v = $pipeline.val();
                if (v) {
                    return v;
                }
                return '';
            }();

            // 起点位置
            data.beginMileage = function () {
                var v = $begin.val('mile');
                if (DyyBase.notEmpty(v)) {
                    return v;
                }
                return '';
            }();

            // 终点位置
            data.endMileage = function () {
                var v = $end.val('mile');
                if (DyyBase.notEmpty(v)) {
                    return v;
                }
                return '';
            }();

            // 任务状态
            data.dataAndRepairState = function () {
                var v = $status.val();
                if (v) {
                    return v;
                }
                return '';
            }();

            // 开工时间 - 1
            data.planStartDate1 = function () {
                var v = $date_01.val();
                if (v) {
                    return v;
                }
                return '';
            }();

            // 开工时间 - 2
            data.planStartDate2 = function () {
                var v1 = $date_01.val();
                var v2 = $date_02.val();
                if (v2) {
                    if (v1) {
                        if (!(Dyy.checkDateLate(v1, v2))) {
                            $date_02.TIP({content: '结束日期应当晚于开始日期！'});
                            data.mode = false;
                        }
                    }
                    return v2;
                }
                return '';
            }();

            return data;
        },

        // 获得repairTaskId对象数组
        getTaskIdArr: function () {
            var $chks = $table_01.find('i.zy-checkbox');
            var arr = [];
            $chks.each(function () {
                var $this = $(this);
                if ($this.hasClass('active')) {
                    arr.push({name: 'repairTaskId', value: $this.attr('data-repairTaskId')});
                }
            });
            return arr;
        },

        // 获得repairTaskIds对象数组 附加上管道ID
        getTaskIdsArr: function () {
            var $chks = $table_01.find('i.zy-checkbox');
            var arr_01 = [];
            var arr_02 = [];
            var pipeLineId;
            if ($chks.length > 0) {
                pipeLineId = $chks.attr('data-pipeLineId');
                $chks.each(function () {
                    var $this = $(this);
                    if ($this.hasClass('active')) {
                        arr_01.push({name: 'repairTaskIds', value: $this.attr('data-repairTaskId')});
                    } else {
                        arr_02.push({name: 'repairTaskIds', value: $this.attr('data-repairTaskId')});
                    }
                });
            }
            if (arr_01.length > 0) {
                arr_01.push({name: 'pipeLineId', value: pipeLineId});
                return arr_01;
            }

            arr_02.push({name: 'pipeLineId', value: pipeLineId});
            return arr_02;
        }
    };

    /**
     * 初始化表格数据
     * @type {*|HTMLElement}
     */
    var DT01 = $table_01.DataTable({
        'language': {
            'paginate': {
                'next': '下一页',
                'previous': '上一页'
            },
            'info': '本次检索共 _TOTAL_ 条，每页显示 10 条，共 _PAGES_ 页',
            'zeroRecords': DyyBase.defect_empty(),
            'infoEmpty': ''
        },
        'autoWidth': false,
        'serverSide': true,
        'pageLength': 10,
        'ordering': false,
        'processing': false,
        'searching': false,
        'lengthChange': false,
        'ajax': function (data, callback) {
            var param = filter.getCondition(data);
            DyyBase.ajax(defectApi.url_repair_list(), param, function (dataset) {
                var returnData = {};
                returnData.draw = data.draw;
                returnData.recordsTotal = dataset.result.total;
                returnData.recordsFiltered = dataset.result.total;
                returnData.data = DyyBase.clearNull(dataset.result.list);
                callback(returnData);
            });
        },
        'drawCallback': function () {
            $('i.zy-checkbox-all').trigger('clear');
        },
        'columns': [
            {
                'data': 'repairTaskId', render: function (data, type, row) {
                return '<i class="zy-checkbox" data-repairTaskId="' + data + '" data-pipeLineId="' + row.pipeLineId + '" title="选中"></i><input type="hidden" name="taskIds" value="'+data+'"><input type="hidden" name="pipeIds" value="'+row.pipeLineId+'">';
            }
            },
            {
                'data': 'name', render: function (data) {
                return '<span title="' + data + '" class="l">' + data + '</span>';
            }
            },
            {
                'data': 'pipeLineName', render: function (data) {
                return '<span title="' + data + '">' + data + '</span>';
            }
            },
            {
                'data': 'planStartDate', render: function (data) {
                return '<span title="' + Dyy.getDate(data) + '">' + Dyy.getDate(data) + '</span>';
            }
            },
            {
                'data': 'planCompletionDate', render: function (data) {
                return '<span title="' + Dyy.getDate(data) + '">' + Dyy.getDate(data) + '</span>';
            }
            },
            {
                'data': 'dataState_label', render: function (data) {
                var color = '';
                switch (true) {
                    case (data == '待发布' || data == '已维修'):
                        color = 'zy-status-gray';
                        break;
                    case (data == '难以维修'):
                        color = 'zy-status-red';
                        break;
                    case (data == '待维修' || data == '进行中'):
                        color = 'zy-status-blue';
                        break;
                    default:
                        break;
                }
                return '<span title="' + data + '" class="' + color + '">' + data + '</span>';
            }
            },
            {
                'data': 'releaseDate', render: function (data) {
                return '<span title="' + Dyy.getDate(data) + '">' + Dyy.getDate(data) + '</span>';
            }
            },
            {
                'data': 'repairTaskId', render: function (data, type, row) {
                if (row.dataState == 'state20') {
                    return '<i data-repairTaskId="' + data + '" class="zy-record-add-icon disabled" title="不可编辑"></i>';
                } else {
                    return '<a href="' + DyyBase.root_path + '/pbf/RepairTask/initCreate.html?repairTaskId=' + data + '"><i data-repairTaskId="' + data + '" class="zy-record-add-icon" title="编辑"></i></a>';
                }
            }
            },
            {
                'data': 'repairTaskId', render: function (data) {
                return '<a href="' + DyyBase.url_repair_details_page() + '?repairTaskId=' + data + '"><i data-repairTaskId="' + data + '" class="zy-details-icon" title="详情"></i></a>';
            }
            },
            {
                'data': 'repairTaskId', render: function (data, type, row) {
                return '<a href="' + DyyBase.root_path + '/pbf/RepairTask/initRepairTaskGIS.html?repairTaskId=' + data + '&pipeLineId=' + row.pipeLineId + '"><i data-repairTaskId="' + data + '" class="zy-record-map-icon" title="地图"></i></a>';
            }
            },
            {
                'data': 'repairTaskId', render: function (data) {
                return '<a href="' + DyyBase.root_path + '/pbf/defectRepairMgr/toRepairStatistics.html?taskid=' + data + '"><i data-repairTaskId="' + data + '" class="zy-record-tj-icon" title="统计"></i></a>';
            }
            }
        ]
    });

    /**
     * dyMap 地图对象, currentMap 当前地图对象
     */
    var $mapIframe, dyMap, currentMap;

    /**
     * 显示或隐藏地图
     * @param tag
     */
    function playMapOrTable(tag) {
        if (tag === 'map') {
            var param = filter.getCondition();
            if (param.mode) {
                $search_btn_list.hide();
                $search_btn_map.show();
                $btn_box.hide();
                $btn_map.hide();
                $btn_list.show();
                $map_div.height(600);
                $list_div.css({'height': 0, 'overflow': 'hidden'});

                if (dyMap === undefined) {
                    $mapIframe = $('#JQ_dyMap');
                    $mapIframe.attr('src', '/gis/default/webmap/baseMapDefectRepair.jsp');
                    $mapIframe.get(0).onload = function () {
                        dyMap = this.contentWindow.queryMutiLayers;
                        currentMap = this.contentWindow.basePipeMap.currentMap;
                        $search_btn_map.trigger('click', [param]);
                    };
                } else {
                    $search_btn_map.trigger('click', [param]);
                }
            }
        } else if (tag === 'table') {
            $search_btn_list.show();
            $search_btn_map.hide();
            $btn_box.show();
            $btn_map.show();
            $btn_list.hide();
            $map_div.height(0);
            $list_div.height(600);

            $search_btn_list.trigger('click');
        }
    }

    // 搜索列表
    $search_btn_list.click(function () {
        var param = filter.getCondition();
        if (param.mode) {
            DT01.draw();
        }
    });

    // 搜索地图
    $search_btn_map.click(function (e, d) {
        var param;
        if (d) {
            param = d;
        } else {
            param = filter.getCondition();
        }
        if (param.mode) {
            // 管道ID和任务ID对象数组
            // 用来查询管道中心线gisid 和 缺陷点gisid
            var params = [];

            var gisJsonArr = [
                {
                    'typeName': 'pipeLineId',
                    'gisIdArray': []
                },
                {
                    'typeName': 'inspDefect',
                    'gisIdArray': []
                },
                {
                    'typeName': 'valveRoomPoint',
                    'gisIdArray': []
                }
            ];

            if (param.pipeLineId) {
                params.push({name: 'pipeLineId', value: param.pipeLineId});
            }

            // 获取当前页任务ID
            var $taskIds = $table_01.find('input[name="taskIds"]');
            $taskIds.each(function(){
                var $this = $(this);
                params.push({name: 'repairTaskIds', value: $this.val()});
            });

            // 获取当前页管道ID
            /*var $pipeIds = $table_01.find('input[name="pipeIds"]');
            var temp_v = '';
            $pipeIds.each(function(){
                var $this = $(this);
                var v = $this.val();
                if(temp_v != v){
                    temp_v = v;
                    params.push({name: 'pipeLineId', value: v});
                }
            });*/

            if (params.length > 0) {
                DyyBase.ajax(defectApi.url_repair_map_task(), params, function (dataset) {
                    if (dataset.bool) {
                        if (dataset.result.pipeLineGisidList) {
                            gisJsonArr[0].gisIdArray = dataset.result.pipeLineGisidList;
                        }
                        if (dataset.result.defectInfoList) {
                            for (var i = 0, len = dataset.result.defectInfoList.length; i < len; i++) {
                                if (dataset.result.defectInfoList[i].gisId) {
                                    gisJsonArr[1].gisIdArray.push(dataset.result.defectInfoList[i].gisId);
                                }
                            }
                        }
                        if (dataset.result.valveRoomGisIdList) {
                            gisJsonArr[2].gisIdArray = dataset.result.valveRoomGisIdList;
                        }

                        //console.log(gisJsonArr);

                        dyMap(currentMap, gisJsonArr);
                    }
                });
            }
        }
    });

    // 发布
    $('#JQ_release_01').click(function () {
        var param = filter.getTaskIdArr();
        if (param.length > 0) {
            DyyBase.ajax(defectApi.url_repair_release(), param, function (dataset) {
                if (dataset.bool) {
                    $(this).MSG({
                        'type': 'success',
                        'content': '提交： ' + dataset.result.count + '个发布维修任务<br>成功： ' + dataset.result.successCount + '个',
                        'yesBtnAct': DyyBase.pageReload
                    });
                }
            })
        } else {
            $(this).MSG({
                'content': '请选择需要发布的维修任务！'
            });
        }
    });

    // 删除
    $('#JQ_delete_01').click(function () {
        var $this = $(this);
        var param = filter.getTaskIdArr();
        if (param.length > 0) {
            $this.MSG({
                type: 'confirm',
                tag: 'no',
                content: '确认要删除选择的维修任务！',
                height: 230,
                yesBtnTxt: '确认',
                yesBtnAct: function () {
                    DyyBase.ajax(defectApi.url_repair_delete(), param, function (dataset) {
                        if (dataset.bool) {
                            var type = (dataset.result.successCount) ? 'success' : 'error';
                            var msg = '选择【' + dataset.result.count + '】个维修项目，已成功删除【' + dataset.result.successCount + '】个。<br>';
                            if(dataset.result.successCount){
                                msg += '待发布的维修项目已成功删除！';
                            }
                            if(dataset.result.count != dataset.result.successCount){
                                msg += '待维修、进行中、已维修的维修项目不可删除。';
                            }
                            $this.MSG({
                                type: type,
                                content: msg,
                                yesBtnAct: function(){
                                    DT01.draw();
                                },
                                closeBtnAct: function(){
                                    DT01.draw();
                                }
                            });
                        }
                    });
                }
            });
        } else {
            $this.MSG({
                content: '请选择要删除的维修任务！'
            });
        }
    });

    // 关闭
    $('#JQ_close_01').click(function () {
        var param = filter.getTaskIdArr();
        if (param.length > 0) {
            DyyBase.ajax(defectApi.url_repair_close(), param, function (dataset) {
                if (dataset.bool) {
                    $(this).MSG({
                        'content': '提交： ' + dataset.result.count + '个关闭维修任务<br>成功： ' + dataset.result.successCount + '个',
                        'yesBtnAct': DyyBase.pageReload
                    });
                }
            })
        } else {
            $(this).MSG({
                'content': '请选择需要关闭的维修任务！'
            });
        }
    });

    // 导出
    $('#JQ_export_01').click(function () {
        if($table_01.find('div').hasClass('zy-datatable-empty')){
            $(this).MSG({content:'没有需要导出的数据！'})
        }else{
            $(this).EXPT({
                name: $pipeline.val('text') + '缺陷维修项目列表',
                param: filter.getCondition(),
                server: DyyBase.root_path + '/pbf/RepairTask/toExcel.json'
            });
        }

    });


    // 查看任务地图
    $btn_map.click(function () {
        playMapOrTable('map');
    });

    // 查看列表
    $btn_list.click(function () {
        playMapOrTable('table');
    });

})(jQuery, window, document);
